using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using EYDIngenieria.ERP.Aplicacion.Gestion;
using EYDIngenieria.ERP.Aplicacion.Mantenedores;
using EYDIngenieria.ERP.ObjetosDeNegocio.Dominio;

public partial class Gestion_IngresoOC : System.Web.UI.Page
{
    private MantenedorProducto mantenedorProducto = new MantenedorProducto();
    private MantenedorFamiliaProducto mantenedorFamiliaProducto = new MantenedorFamiliaProducto();
    private MantenedorProveedor mantenedorProveedor = new MantenedorProveedor();
    private GestionOrdenDeCompra gestionOrdenDeCompra = new GestionOrdenDeCompra();
    private MantenedorEstadoOrdenDeCompra mantenedorEstadoOrdenDeCompra = new MantenedorEstadoOrdenDeCompra();
    private Producto[] productos;
    private FamiliaProducto[] familiasDeProducto;
    private Proveedor[] proveedores;
    private OrdenDeCompra oc = new OrdenDeCompra();
    private DetalleOrdenDeCompra[] detalleOrdenDeCompra;
   
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session.Keys.Count == 0)
            Response.Redirect("../Default.aspx");
        if (!IsPostBack)
        {
            CargarListaOrdenes();
            CargaEstados();
        }
    }

    private void CargaEstados()
    {
        ddlEstado.DataTextField = "Nombre";
        ddlEstado.DataValueField = "Id";
        ddlEstado.DataSource = mantenedorEstadoOrdenDeCompra.Listar();
        ddlEstado.DataBind();
        ddlEstado.Items.Insert(0,"Todos");
    }

    private void CargarListaOrdenes()
    {
        lbxOrdenes.Items.Clear();
        OrdenDeCompra[] ordenes =  gestionOrdenDeCompra.Listar();

        ListItem l;
        foreach(OrdenDeCompra oc in ordenes)
        {
            l = new ListItem(string.Format("{0} - {1} - {2}",oc.NumeroOrdenDeCompra.ToString(),oc.Proveedor.RazonSocial,oc.MontoTotal.ToString()),oc.Id.ToString());
            lbxOrdenes.Items.Add(l);
        }
    }

    private void CargarListaOrdenes(EstadoOrdenDeCompra eoc)
    {
        lbxOrdenes.Items.Clear();
        OrdenDeCompra[] ordenes = gestionOrdenDeCompra.Listar(eoc);

        ListItem l;
        foreach (OrdenDeCompra oc in ordenes)
        {
            l = new ListItem(string.Format("{0} - {1} - {2}", oc.NumeroOrdenDeCompra.ToString(), oc.Proveedor.RazonSocial, oc.MontoTotal.ToString()), oc.Id.ToString());
            lbxOrdenes.Items.Add(l);
        }
    }


    private void SeteaTotal(OrdenDeCompra oc)
    {
        double montoTotal = 0;
        foreach (DetalleOrdenDeCompra d in oc.Detalle)
        {
            montoTotal = montoTotal + d.ValorTotal;   
        }
        ((Label) gdvDetalleOC.FooterRow.FindControl("lblTotal")).Text = montoTotal.ToString();
    }



    protected void lbxOrdenes_SelectedIndexChanged(object sender, EventArgs e)
    {
        OrdenDeCompra oc = gestionOrdenDeCompra.Obtener(int.Parse(lbxOrdenes.SelectedValue.ToString()));
        txbFecha.Text = oc.Fecha.ToShortDateString();
        txbNumeroOc.Text = oc.NumeroOrdenDeCompra.ToString();
        txbProveedor.Text = oc.Proveedor.RazonSocial;
        txbMontoTotal.Text = oc.MontoTotal.ToString();
        txbNumeroDeCheque.Text = oc.NumeroCheque.ToString();
        txbNumeroFactura.Text = oc.Factura==null?string.Empty :oc.Factura.NumeroFactura.ToString();
        txbEstado.Text = oc.EstadoOrdenDeCompra.Nombre.ToString();
        gdvDetalleOC.DataSource = oc.Detalle;
        gdvDetalleOC.DataBind();
        SeteaTotal(oc);
    }

    protected void lbxEstado_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (ddlEstado.SelectedItem.Text.Equals("Todos"))
        {
             CargarListaOrdenes();
        }
        else
        {
            CargarListaOrdenes(mantenedorEstadoOrdenDeCompra.Obtener(int.Parse(ddlEstado.SelectedValue.ToString())));
        }
    }
}
